home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-04 | 4.8 KB | 113 lines | [TEXT/UNIX] |
- /*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah $Hdr: mmap.h 1.4 89/08/14$
- *
- * @(#)mapmem.h 7.2 (Berkeley) 6/6/90
- */
-
- /*
- * Mapped memory descriptors.
- *
- * A process has one of these for every "mapped" memory region.
- * Mapped memory is characterized by:
- * - Corresponding physical memory is neither paged nor swapped.
- * - User PTEs have both pg_v and pg_fod set.
- * - Has no backing swap space unless mapped over existing data.
- * - If mapped over existing data, original data is lost when
- * segment is unmapped. (i.e. pages are reinitialized to ZFOD)
- * Operations:
- * (*mm_fork)(mp, ischild) struct mapmem *mp; int ischild;
- * Called during fork in both parent and child. Parent
- * call can be used for maintaining reference counts and
- * should NEVER destroy the region. Child call should be
- * used for unmapping regions not inherited across forks.
- * (*mm_vfork)(mp, fup, tup) struct mapmem *mp; struct user *fup, *tup;
- * Called twice during vfork (always in parent context)
- * after exchanging resources (including u_mmap chains).
- * `fup' is the donor and `tup' the recipient of the
- * "parent" (full) context. Needed for maintaining
- * reference counts or if the underlying object contains
- * references to owning process. Routine should NEVER
- * destroy the region.
- * (*mm_exec)(mp) struct mapmem *mp;
- * Called during exec before releasing old address space.
- * Used for graceful cleanup of underlying object. Resources
- * will be freed regardless of what this routine does.
- * Need to add a post-exec call to re-establish mappings
- * in the new address space for regions inherited across execs.
- * (*mm_exit)(mp) struct mapmem *mp;
- * Called during exit just before releasing address space.
- * Used for graceful cleanup of underlying object. Resources
- * will be freed regardless of what this routine does.
- * The default semantics for a region with routine addresses of zero are
- * that it is inherited across forks, stays with the "active" process during
- * vforks, and is destroyed by execs and exit.
- */
-
- struct mapmem {
- struct mapmem *mm_next; /* next descriptor */
- int mm_id; /* identifier (e.g. fd, shmid) */
- caddr_t mm_uva; /* user VA at which region is mapped */
- int mm_size; /* size of mapped region */
- int mm_prot; /* attributes of region */
- struct mapmemops { /* operations */
- int (*mm_fork)();
- int (*mm_vfork)();
- int (*mm_exec)();
- int (*mm_exit)();
- } *mm_ops;
- };
-
- #define MMNIL ((struct mapmem *)0)
-
- /* attributes */
- #define MM_RW 0x00 /* region is read-write */
- #define MM_RO 0x01 /* region is read-only */
- #define MM_CI 0x02 /* caching is inhibited on region */
- #define MM_NOCORE 0x04 /* cannot write region to core file;
- e.g. mapped framebuffer hardware */
-
- #ifdef KERNEL
- #define MMALLOC(mp) \
- (mp) = (struct mapmem *)malloc((u_long)sizeof(struct mapmem), \
- M_MAPMEM, M_WAITOK)
-
- #define MMFREE(mp) \
- free((caddr_t)(mp), M_MAPMEM)
- #endif
-